/**
 * User模块 - 管理用户相关的状态和操作
 */
import { login, getUserInfo as getUserInfoApi } from "../../api/user"
import { getToken, setToken, removeToken } from '@/utils/auth'

// 初始化时只从本地存储获取token
const token = getToken()

const state = {
  // 用户基本信息
  user: null,
  // 登录状态 - 根据token判断
  isLoggedIn: !!token,
  // 用户token
  token: token,

  // 用户角色
  roles: [],
}

const mutations = {
  // 设置用户信息
  SET_USER(state, user) {
    state.user = user
    state.isLoggedIn = !!user
  },
  SET_TOKEN(state, token) {
    state.token = token
    state.isLoggedIn = !!token
  },

  // 更新用户信息
  UPDATE_USER(state, userData) {
    if (state.user) {
      // 保持响应式更新，合并新数据到现有用户对象
      state.user = { ...state.user, ...userData }
    } else {
      state.user = userData
    }
  },

  // 设置用户角色
  SET_ROLES(state, roles) {
    state.roles = roles
  },

  // 登出
  LOGOUT(state) {
    state.user = null
    state.isLoggedIn = false
    state.token = null
    state.permissions = []
    state.roles = []
  }
}

const actions = {
  // 初始化认证状态
  async initAuth({ commit }) {
    const token = getToken()
    if (token) {
      try {
        // 调用API获取用户信息
        const response = await getUserInfoApi()
        const userInfo = response.data
        
        commit('SET_TOKEN', token)
        commit('SET_USER', userInfo)
        commit('SET_ROLES', ['user'])
      } catch (error) {
        // 如果获取用户信息失败，清除token
        commit('LOGOUT')
        removeToken()
      }
    } else {
      // 没有token，确保状态为未登录
      commit('LOGOUT')
    }
  },

  // 登录操作
  async login({ commit, dispatch }, { username, password }) {
    try {
      // 调用API进行登录验证
      const response = await login({ userName: username, password, role: 'user' })
      const user = response.data
      
      // 保存token
      commit('SET_TOKEN', user.token)
      setToken(user.token)
      
      // 获取完整的用户信息
      try {
        const userInfoResponse = await getUserInfoApi()
        const userInfo = userInfoResponse.data
        commit('SET_USER', userInfo)
        commit('SET_ROLES', ['user'])
      } catch (error) {
        console.warn('获取用户信息失败，使用登录返回的基本信息:', error)
        // 如果获取用户信息失败，使用登录返回的基本信息
        commit('SET_USER', user)
        commit('SET_ROLES', ['user'])
      }
      
      return { success: true, user }
    } catch (error) {
      return { success: false, error: error.message }
    }
  },

  // 登出操作
  logout({ commit }) {
    commit('LOGOUT')
    // 清除本地存储
    removeToken()
  },

  // 更新用户资料
  async updateProfile({ commit }) {
    try {
      // 这里应该调用API更新用户资料
      const response = await getUserInfoApi()
      const userInfo = response.data
      commit('UPDATE_USER', userInfo)
      return { success: true }
    } catch (error) {
      console.error('更新用户资料失败:', error)
      return { success: false, error: error.message }
    }
  },

  // 直接更新用户信息（用于本地更新，不调用API）
  updateUserInfo({ commit }, userData) {
    commit('UPDATE_USER', userData)
  }
}


export default {
  namespaced: true,
  state,
  mutations,
  actions
}